local heal = {}
setmetatable(heal, heal)
ac.heal = heal

-- 治疗
function heal:__call(info)
	local hl = setmetatable(info,heal)
	if not hl.source then 
		hl.source = hl.target
	end 
	return hl:healing()
end

local mt = {}
heal.__index = mt 

-- 结构
mt.type = 'heal'

--来源
mt.source = nil

--目标
mt.target = nil

--原因
mt.reason = '未知'

--治疗
mt.heal = 0

--回蓝
mt.mana = 0

--是持续治疗
mt.always = false

--关联技能
mt.skill = nil

--判断治疗原因
function mt:of_reason(name)
    return self.reason:find(name) ~= nil
end 

-- 是持续治疗
function mt:is_always()
	return self.always == true
end 

-- 设置治疗数据
function mt:change(life,mana)
	self.heal = life
	self.mana = mana
end 

-- 治疗
function mt:healing()
	local source = self.source
	local target = self.target

	if not target:is_alive() then 
		return false 
	end

	if target:has_restriction "禁疗" then 
		return false 
	end 
	
	if target:dispatch('单位-受到治疗检查',target,source,self) == false then
		return false
	end 

	self.heal = self.heal * (target:get('治疗效果') + 100) * 0.01
	self.mana = self.mana * (target:get('治疗效果') + 100) * 0.01

	target:notify('单位-即将受到治疗',target,source,self)

	if self.heal > 0 then 
		target:add('生命',self.heal)
	end 
	
	if self.mana > 0 then 
		target:add('魔法',self.mana)
	end

	target:notify('单位-受到治疗',target,source,self)
	
	return true
end 

-- 治疗单位
function ac.unit.__index:heal(info)
	if type(info) == 'number' then
		info = {
			heal = info,
		}
	end
	info.target = self
	return ac.heal(info)
end

return heal